package review.final_;

public class FinalDetail01 {
    public static void main(String[] args) {
        CC cc = new CC();

        new EE().cal();
    }
}

class AA {
    // final修饰的属性相当于常量，必须赋初始值
    public final double TAX_RATE = 0.08;//定义时赋值
    public final double TAX_RATE2;
    public final double TAX_RATE3;

    public AA() { // 构造器中赋值
        TAX_RATE2 = 1.1;
    }
    { // 在代码块中赋值
        TAX_RATE3 = 8.8;
    }
}

class BB {
    /*
    如果final修饰的属性是静态的，则初始化的位置只能是
    1.定义时 2.静态代码块中
     */
    public static final double TAX_RATE = 99.9;
    public static final double TAX_RATE2;

    //3.不能在构造器中赋值,因为构造器只有在创建对象的时候才会被调用
    public BB() {

    }
    static {
        TAX_RATE2 = 3.3;
    }
}

//final类不能继承，但是可以实例化
final class CC{}

//如果不是final类，但是含有final方法，则该方法虽然不能重写，但是可以被继承
//即仍然遵守继承机制
class DD {
    public void cal(){
        System.out.println("cal()方法");
    }
}

class EE extends DD{

}
